package course06

object ImplicitApp {


  //隐式类只能是内部类
  implicit  class Calculator(x:Int){
     def add(a:Int) = a+x
  }

//  def main(args: Array[String]): Unit = {
//    //这个类是隐式的，参数是Int，所有的Int类型都具有这个类的add方法
//    println(1.add(3))
//    println("12".add(3)) //这个报错
//  }



//
//  def main(args: Array[String]): Unit = {
//    def testParam(implicit name:String):Unit={
//      println(name+"~~~~~~~~~~~~")
//    }
//
//    //一轮测试
//    // testParam               //这样会报错的  没有参数
//    testParam("卢本伟")         //这样输出卢本伟
//    implicit val name= "Faker" //定义因式参数 Faker
//    testParam                  //他会自己找那个隐式参数 然后输出Faker!
//    testParam("卢本伟")         //这样还是输出卢本伟
//
//
//    //二轮测试‘
//    implicit val s1 = "111"
//    implicit val s2 = "222"
//    testParam                    //这样会报错，不知道输出s1 还是 s2。
//  }








//  def main(args: Array[String]): Unit = {
//  //定义隐式转换   implicit + def + 方法名  传入普通人 传出超人  new 超人(普通人.name)
//  implicit  def man_superman(man:Man):Superman = new Superman(man.name)
//  val man = new Man("PK")
//  man.eat()
//  //普通人，什么也没做！！   就上面的一句 implicit，普通人就能飞了！！！！！
//  man.fly()
//}
//
////普通人可以吃
//class Man(val name:String){
//  def eat():Unit={
//    println(s"I am $name and  i can  eat !!")
//  }
//}

////超人可以飞
//class Superman(val name:String){
//  def fly():Unit={
//    println(s"Super Man $name Can Fly ... ")
//  }
//}
//

//  def main(args: Array[String]): Unit = {
//    //隐式转换 , 只需要那一句话
//    implicit def superFile(file:File):RichFile=new RichFile(file)
//    //这是一个普通的 Java_File 类, 这个File类没有直接读取一个文件并直接输出字符串的方法
//    //然后，传统Java  的 File就多了一个 readAndToString 方法！   注意：这句话要写在implicit那句下面
//    val file = new File("C:\\Users\\Administrator\\Desktop\\work\\hello.txt");
//    println("这个文件的内存是： "+file.readandtoString()) // hello world hello world hello world hello world
//
//  }





//  //增强java File 类，
//  class RichFile(val file:File){
//    def readandtoString()={
//      //读取这个文件，转化成字符串
//      scala.io.Source.fromFile(file.getPath).mkString
//    }
//  }

}